Las funciones se pueden llamar en el campo Variables de un bloque o directamente en el texto de respuesta usando #{...}:

#{discord_add_role(message_from, '1465674567090704592')}

Los IDs de servidor, canal, rol y mensaje de Discord son valores numéricos largos. La forma más fácil de copiarlos es habilitar Configuración → Avanzado → Modo Desarrollador. Después de eso, la opción Copiar ID aparecerá en el menú contextual de cualquier objeto.

La conexión del bot se describe en el artículo Cómo crear un chatbot en Discord.

Dónde obtener el ID del mensaje

El ID del mensaje que activó el bloque se almacena en la variable discord_message_id. No es necesario recuperarlo por separado:

#{discord_delete_message(discord_message_id)}

Si necesitas datos que no están disponibles en las variables predefinidas, el webhook completo está disponible en la variable discord_webhook. Se completa cuando se asigna algún valor a la variable save_webhook:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Esto es una respuesta al mensaje")

Variables creadas automáticamente

Estas variables se completan automáticamente para cada evento y no requieren configuración adicional.

Variable Descripción Ejemplo
guild_id ID del servidor 1465674567090704591
discord_event Tipo de evento como una sola palabra message
discord_message_id ID del mensaje con el prefijo mid mid1465674569095319625
message_from ID del autor del evento con el prefijo uid uid413984787162726410
from_username Nombre de usuario de Discord del autor 00rei
from_name Nombre visible del autor en el chat Rus
username Nombre de usuario para mensajes directos al bot 00rei
is_bot 1 si el autor del evento es otro bot 0
nickname Apodo del servidor; vacío si no está configurado Moderator
roles Lista de IDs de roles del autor ["1465674567090704592"]
is_admin 1 si el usuario es administrador o propietario del servidor 1
reply_from ID del autor del mensaje al que se responde uid493121376652230668
reply_from_username Nombre de usuario del autor al que se responde _deikin
reply_from_name Nombre visible del autor al que se responde Rus
reply_to_bot 1 si la respuesta es al bot 0
reply_message_id ID del mensaje al que se responde mid1534837349219958804
reply_text Texto del mensaje al que se responde ¿quién está de guardia hoy?

Los prefijos uid, cid y mid son parte del valor. Pasa estas variables a las funciones tal como están; no es necesario eliminar los prefijos.

from_name vs. from_username

from_name contiene el nombre que se debe usar para dirigirse al usuario en el chat:

  1. Apodo del servidor, si está configurado.
  2. Nombre visible de la cuenta.
  3. Nombre de usuario.

Esta es la variable recomendada para usar en saludos porque from_username puede verse como _deikin o 00rei.

Las variables reply_* se completan solo cuando el mensaje entrante es una respuesta a otro mensaje. Para mensajes regulares, todas se borran.

Por lo tanto, la siguiente condición distingue de manera confiable una respuesta de un mensaje regular:

#{reply_from != ''}

Las variables nickname, roles e is_admin se refieren al autor del evento actual.

Discord no proporciona estos datos para eventos de reacción, por lo que las comprobaciones de administrador deben realizarse en un evento de mensaje o comando de barra.

El texto del mensaje entrante se almacena en la variable estándar question, al igual que en otros canales.


Eventos

Además de los mensajes regulares, también se envían eventos de servicio al embudo.

Su texto se almacena en la variable question, por lo que puedes manejarlos usando condiciones de texto regulares.

discord_event Texto en question Cuándo ocurre
message Texto del mensaje Un miembro envía un mensaje
message_edit Texto del mensaje actualizado Se edita un mensaje
interaction /warn @usuario spam Se usa un comando de barra o se hace clic en un botón
reaction_add new_like ❤️ uid413984787162726410 Se añade una reacción
reaction_remove reaction_remove ❤️ uid413984787162726410 Se elimina una reacción
message_delete message_delete mid1465674569095319625 Se elimina un mensaje
messages_delete_bulk messages_delete_bulk 12 Se eliminan varios mensajes
member_join member_join uid413984787162726410 Un miembro se une al servidor
member_leave member_leave uid413984787162726410 Un miembro abandona el servidor
member_update member_update uid413984787162726410 Cambia el apodo o los roles de un miembro
member_ban member_ban uid413984787162726410 Un miembro es baneado
member_unban member_unban uid413984787162726410 Un miembro es desbaneado

Para una reacción personalizada, se usa el ID del emoji personalizado en lugar del emoji en sí:

new_like beer:1479419477396291696 uid413984787162726410

Consulta la sección Reacciones para más detalles.

Si un bloque debe activarse solo para mensajes regulares enviados por miembros, añade la siguiente condición:

discord_event == 'message'

Esto filtra todos los eventos de servicio a la vez.

Verificar solo el texto del evento no es confiable porque un miembro podría enviar manualmente un mensaje como member_join.

Importante: member_update se activa con cualquier actualización de miembro, incluido un rol asignado por el propio bot. Un bloque que reacciona a member_update y asigna un rol puede crear un bucle, por lo que dichas condiciones siempre deben restringirse adecuadamente.


Mensajes

Función Descripción
discord_send_message(channel_id, text) Enviar un mensaje a cualquier canal
discord_send_dm(user_id, text) Enviar un mensaje directo a un miembro
discord_reply_to_message(message_id, text) Responder a un mensaje
discord_edit_message(message_id, text) Editar un mensaje enviado por el bot
discord_delete_message(message_id) Eliminar un mensaje
discord_bulk_delete_messages(channel_id, message_ids) Eliminar varios mensajes a la vez
discord_get_message(channel_id, message_id) Recuperar un mensaje
discord_pin_message(message_id) Fijar un mensaje
discord_unpin_message(message_id) Desfijar un mensaje

Limitaciones de Discord: No hay límite de tiempo para editar o eliminar tus propios mensajes. La eliminación masiva solo funciona para mensajes de menos de 14 días de antigüedad, y puedes eliminar entre 2 y 100 mensajes a la vez.


Reacciones

Función Descripción
discord_send_reaction(message_id, reaction) Añadir una reacción
discord_delete_reaction(message_id, reaction, user_id) Eliminar una reacción. Si se omite user_id, se elimina la reacción del bot

El parámetro reaction acepta un emoji regular, como ❤️, o el ID de un emoji personalizado del servidor.

Dónde obtener un ID de reacción personalizada

Añade la reacción personalizada requerida a cualquier mensaje en el canal.

Aparecerá una devolución de llamada como esta en el chat:

new_like beer:1479419477396291696 uid413984787162726410

Aquí:

beer:1479419477396291696

es el ID de la reacción.

Puedes copiarlo y usarlo en funciones de reacción:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Los emojis regulares aparecen en las devoluciones de llamada tal como son:

new_like ❤️ uid413984787162726410

donde uid413984787162726410 es el ID del miembro que añadió la reacción.


Moderación

Función Descripción
discord_timeout_member(user_id, seconds) Silenciar a un miembro durante el número de segundos especificado, hasta 28 días
discord_remove_timeout(user_id) Eliminar un silencio antes de tiempo
discord_kick_member(user_id) Expulsar a un miembro del servidor; puede regresar usando una invitación
discord_ban_member(user_id, delete_message_seconds) Banear a un miembro; el segundo argumento especifica cuántos segundos de historial de mensajes eliminar, hasta 7 días
discord_unban_member(user_id) Desbanear a un miembro

Discord no permite que el bot modere a un miembro cuyo rol sea superior al rol del bot. Tampoco se puede moderar al propietario del servidor.


Roles y miembros

Función Descripción
discord_add_role(user_id, role_id) Asignar un rol
discord_remove_role(user_id, role_id) Eliminar un rol
discord_get_roles() Obtener los roles del servidor y sus IDs
discord_get_member(user_id) Obtener datos del miembro, incluidos apodo, roles y fecha de ingreso
discord_set_nickname(user_id, nickname) Cambiar el apodo de un miembro en el servidor

El rol del bot debe ser superior al rol que está asignando.

El rol @everyone y los roles gestionados por integraciones, incluidos los roles de otros bots, no se pueden asignar.


Canales y tickets

Función Descripción
discord_create_channel(name, type, parent_id, permission_overwrites) Crear un canal
discord_delete_channel(channel_id) Eliminar un canal
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Permitir o denegar permisos de canal
discord_create_invite(channel_id, max_age, max_uses) Crear un enlace de invitación
discord_get_invites() Obtener los enlaces de invitación del servidor

Para discord_create_channel, el type predeterminado es:

Valor Tipo de canal
0 Canal de texto
2 Canal de voz
4 Categoría

Puedes pasar un ID de categoría en parent_id para crear el canal dentro de esa categoría.

Para discord_set_channel_permission, el último argumento especifica quién recibe los permisos:

Valor Destinatario
1 Miembro
0 Rol

Los parámetros allow y deny aceptan los siguientes valores:

Valor Permiso
1024 Ver canal
2048 Enviar mensajes
3072 Ver canal y enviar mensajes
65536 Leer historial de mensajes

Para discord_create_invite, la duración de la invitación se especifica en segundos.

Por ejemplo:

86400

significa 24 horas.

Un valor de max_uses de 0 significa usos ilimitados.


Comandos de barra

Función Descripción
discord_get_commands() Obtener los comandos registrados en el servidor
discord_set_commands(commands) Reemplazar el conjunto completo de comandos

discord_set_commands acepta una lista de comandos:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Mostrar reglas del servidor"
  },
  {
    "name": "warn",
    "description": "Emitir una advertencia",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Usuario",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Motivo",
        "required": false
      }
    ]
  }
]')}

Requisitos de Discord

  • name debe contener solo caracteres en minúsculas, sin espacios, y debe tener entre 1 y 32 caracteres de longitud.
  • description es obligatorio y debe tener entre 1 y 100 caracteres de longitud.
  • Las opciones obligatorias deben aparecer antes que las opciones opcionales.
  • Pasar una lista vacía elimina todos los comandos del bot del servidor.

Tipos de opciones

Tipo Descripción
3 Cadena
4 Entero
5 Booleano
6 Miembro
7 Canal
8 Rol

Cuando se llama a un comando, se envía al embudo como una cadena como:

/warn @usuario spam

En otras palabras, el nombre del comando y los valores de las opciones están separados por espacios.

Puedes manejarlo usando una condición de texto regular.

No se requiere una función separada para los botones. Los botones se configuran en un bloque de respuesta normal, y un clic en un botón se recibe de la misma manera que un comando de barra: el valor del botón aparece en el texto.


Puntos y Tabla de Clasificación

La integración de Discord incluye un sistema de agradecimiento incorporado. Se otorgan puntos al autor del mensaje citado.

Puedes usarlo para construir niveles, rangos y tablas de clasificación.

Función Descripción
discord_add_thanks_score(value) Agrega puntos al autor del mensaje citado
discord_add_thanks_score_for_answer(value) Agrega puntos al miembro que respondió
discord_minus_thanks_score(value) Elimina puntos
discord_get_score(user_id) Devuelve los puntos de un miembro como un número. Sin argumento, usa el autor del evento
discord_get_level(user_id, points_per_level) Obtiene el nivel de un miembro. Umbral predeterminado: 100 puntos por nivel
discord_get_user_info(user_id) Obtiene puntos, posición en la tabla de clasificación y nombre como un solo objeto
discord_get_top(count, shift, humanize, delimiter) Obtiene la tabla de clasificación

Para discord_get_top:

  • count — número de filas a devolver;
  • shift — número de filas a omitir, útil para paginación;
  • humanize=true — devuelve texto listo para mostrar;
  • delimiter — separador entre el nombre del miembro y los puntos.

Al comparar puntos en una condición de bloque, usa discord_get_score. Esta función devuelve un número, por lo que las comparaciones numéricas funcionan como se espera.


Ejemplos

Dar la Bienvenida a un Nuevo Miembro mediante Mensaje Directo

Condición de bloque:

member_join

En el campo Variables:

discord_send_dm(
    message_from,
    '¡Hola, #{from_name}! Revisa las reglas fijadas.'
)

Eliminar un Mensaje que Contiene una Palabra Prohibida y Silenciar al Miembro por 24 Horas

Condición de bloque: una lista de palabras prohibidas.

Condición adicional:

is_admin != 1

Funciones:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Asignar un Rol por una Reacción a un Mensaje Específico

Condición de bloque:

new_like 🍕

Condición adicional:

contains(discord_message_id, '1534927170965602324')

Función:

discord_add_role(
    message_from,
    '1465674567090704592'
)

Crear un Canal de Ticket Privado desde un Botón

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Describe tu problema en un solo mensaje.'
)

La primera línea de permisos oculta el canal para todos (guild_id representa el rol @everyone aquí).

La segunda línea hace que el canal esté disponible para el miembro que creó el ticket.


Otorgar Puntos por Agradecimientos y Asignar un Rol Basado en el Nivel

Condición de bloque:

gracias;grax;thank you

Condición adicional:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Funciones:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

La condición:

reply_from != message_from

evita que los miembros se otorguen puntos a sí mismos.

La condición:

reply_to_bot != 1

evita que se otorguen puntos al bot.


Mostrar tus Puntos con un Comando

Condición de bloque:

/xp

En el campo Variables:

points = discord_get_score()

lvl = discord_get_level()

Texto de respuesta:

#{from_name}, tienes #{points} XP · Nivel #{lvl}

Mostrar la Tabla de Clasificación con un Comando

Condición de bloque:

/top

Texto de respuesta:

🏆 Tabla de Clasificación XP:

#{discord_get_top(10, 0, true, ' — ')}